package org.inote.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

/**
 * 字符串格式相关工具类
 * @author HUAWEI
 */
public class StringFormUtil {

    /**
     * 手机号长度
     */
    public static int PHONE_LENGTH = 11;

    /**
     * 密码最小长度
     */
    public static int PASSWORD_MIN_LENGTH = 6;

    /**
     * 判断字符串是否有空值
     * @param str
     * @return
     */
    public static boolean isEmpty(String ... str){
        for (String s : str){
            if (s == null || "".equals(s.replace(" ", ""))){
                return true;
            }
        }
        return false;
    }

    /**
     * 判断密码格式是否正确
     * @param password
     * @return
     */
    public static boolean isPassword(String password){
        if (password == null || "".equals(password)){
            return false;
        }
        if (password.length() < PASSWORD_MIN_LENGTH){
            return false;
        }
        return true;
    }

    /**
     * 判断手机号格式是否正确（测试版）
     * @param phone 手机号
     * @return
     */
    public static boolean isPhone(String phone){
        if (phone == null || "".equals(phone)){
            return false;
        }
        if (phone.length() != PHONE_LENGTH){
            return false;
        }
        return isChinaPhoneLegal(phone) || isHKPhoneLegal(phone);
    }


    /**
     * 检测字符串的长度是否超过最大长度
     * @param string 字符串
     * @param length 最大长度
     * @return
     * 1.true：长度合法
     * 2.false：长度过长
     */
    public static boolean stringLengthForm(String string, int length){
        if (isEmpty(string)){
            return false;
        }
        if (string.length()>length){
            return false;
        }
        return true;
    }

    /**
     *
     * 大陆手机号码11位数，匹配格式：前三位固定格式+后8位任意数
     * 此方法中前三位格式有：
     * 13+任意数
     * 145,147,149
     * 15+除4的任意数(不要写^4，这样的话字母也会被认为是正确的)
     * 166
     * 17+3,5,6,7,8
     * 18+任意数
     * 198,199
     * @param str
     * @return 正确返回true
     * @throws PatternSyntaxException
     */
    public static boolean isChinaPhoneLegal(String str) throws PatternSyntaxException {
        // ^ 匹配输入字符串开始的位置
        // \d 匹配一个或多个数字，其中 \ 要转义，所以是 \\d
        // $ 匹配输入字符串结尾的位置
        String regExp = "^((13[0-9])|(14[5,7,9])|(15[0-3,5-9])|(166)|(17[3,5,6,7,8])" +
                "|(18[0-9])|(19[8,9]))\\d{8}$";
        Pattern p = Pattern.compile(regExp);
        Matcher m = p.matcher(str);
        return m.matches();
    }

    /**
     * 香港手机号码8位数，5|6|8|9开头+7位任意数
     * @param str
     * @return 正确返回true
     * @throws PatternSyntaxException
     */
    public static boolean isHKPhoneLegal(String str) throws PatternSyntaxException {
        // ^ 匹配输入字符串开始的位置
        // \d 匹配一个或多个数字，其中 \ 要转义，所以是 \\d
        // $ 匹配输入字符串结尾的位置
        String regExp = "^(5|6|8|9)\\d{7}$";
        Pattern p = Pattern.compile(regExp);
        Matcher m = p.matcher(str);
        return m.matches();
    }

}
